查看原文
其他

Linux环境下账号和权限管理

Jake Tian 杰哥的IT之旅 2019-05-08


概述

在Linux系统中,根据系统管理的需要将用户账号分为不同的类型,其拥有的权限,担任角色也不同,主要包括超级用户、普通用户和程序用户。

1用户账号
  • 超级用户:root用户是Linux系统中默认的超级用户账号,类似于windows系统中的Administrator用户。只有当进行系统管理、维护任务时,才建议使用root用户登录系统,日常事务处理建议只使用普通用户账号。

  • 普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限。

  • 程序用户:在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行。



2
组账号



基于某种特定联系将多个用户集合在一起,构成一个用户组,用于表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组。若该用户同时还包括在其他的组中,这个组称为该用户的附加组。



3
UID和GID号



Linux系统中的每一个用户账号都有一个数字形式的身份标记,称为UID,UID作为区分用户的基本数据,原则上每个用户的UID号应该是唯一的。root用户账号的UID号为固定值0,而程序用户账号UID号默认为1~499,500~60000的UID号默认分配给普通用户使用。


与UID相类似,每一个组账号也有一个数字形式的身份标记,称为GID,root组账号的GID号为固定值0,而程序组账号的GID号默认为1~499,500~60000的GID号默认分配给普通组使用。


4
用户账号文件


与用户账号相关的配置文件主要有两个,分别是/etc/passwd、/etc/shadow。前者用于保存用户名称、宿主目录、登录shell等基本信息,后者用于保存用户的密码、账号有效期等信息。两个配置文件中,每一行对应一个用户账号,不同的配置项之间使用冒号“:”进行分隔。


1)passwd文件中的配置行格式

系统中所有用户的账号基本信息都保存在/etc/passwd文件中,该文件是文本文件,任何用户都可以读取文件中内容。


[root@localhost ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# tail -1 /etc/passwd
ftpadmin:x:502:503::/home/ftpadmin:/bin/bash
[root@localhost ~]#


在passwd 文件开头的部分,包括超级用户root及各程序用户的账号信息,系统中新增加的用户账号信息将保存到passwd文件的末尾。passwd文件的每一行美容中,包含了七个用冒号“:”分隔的配置字段。


  • 第1字段:用户账号的名称。也是登录系统时使用的识别名称。

  • 第2字段:经过加密的用户密码字串,或者密码占位符“x”。

  • 第3字段:用户账号的UID号。

  • 第4字段:所属基本组账号的GID号。

  • 第5字段:用户全名。

  • 第6字段:宿主目录,即该用户登录后所在的默认工作目录。

  • 第7字段:登录shell等信息。


2)shadow文件中的配置行格式


shadow文件被称为“影子文件”,其中保存有各用户账号的密码信息,因此对shadow文件的访问应该进行严格限制。默认只有root用户能够读取文件中的内容,而不允许直接编辑该文件中的内容。


[root@localhost ~]# head -2 /etc/shadow
root:$1$zvbfAo4p$mg5k7oNqxBxzDyQYd.dB3/:17307:0:99999:7:::
bin:*:15980:0:99999:7:::
[root@localhost ~]# tail -1 /etc/shadow
ftpadmin:$6$xf828o4R$ApMz8RE4mV43E7JAsgr9d63B3jEapVqYBpSc7aPTkvcnL8lRGaJhTP.OVI2pq1kHJRGFdqMIvHpTLQgzGT0El0:17308:0:99999:7:::
[root@localhost ~]#


shadow文件的每一行内容中,包含了九个用冒号“:”分隔的配置字段。

  • 第1字段:用户账号名称。

  • 第2字段:使用MD5加密的密码字串信息,当为“*”或“!!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无需密码即可登录系统。

  • 第3字段:上次修改密码的时间。

  • 第4字段:密码的最短有效天数。默认为0,表示不进行限制。

  • 第5字段:密码的最长有效天数。默认为99999,表示不进行限制。

  • 第6字段:提前多少天警告用户口令将过期,默认为7.

  • 第7字段:在密码过期之后多少天内禁用此用户。

  • 第8字段:账号失效时间,默认为空号,表示账号永久可用。

  • 第9字段:保留字段,目前没有特定用途。


5
添加、删除、修改用户账号命令汇总


useradd命令——添加用户账号
-u指定用户的UID号,要求该UID号未被其他用户使用。
-d指定用户的宿主目录位置。
-e指定用户的账号失效时间。
-g指定用户的基本组名(或使用GID号)。
-G指定用户的附加组名(或使用GID号)。
-M不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录。
-s指定用户的登录shell。
passwd命令——为用户账号设置密码
-d清空指定用户的密码,仅使用用户名即可登录系统。
-l

锁定用户账号。

-S查看用户账号的状态。
-u解锁用户账户。
usermod命令——修改用户账号属性
-u修改用户的UID号。
-d

修改用户的宿主目录位置。

-e修改用户的账户失效时间。
-g修改用户的基本组名(或使用GID号)。
-G指定用户的附加组名(或使用GID号)。
-s指定用户的登录shell。
-l更改用户账户的登录名称。
-L锁定用户账户。
-U解锁用户账户。
userdel命令——删除用户账户
-r同时删除宿主目录。
groupadd命令——添加组账号
-g需要指定GID号时。
gpasswd命令——添加、设置、删除组成员
-a添加用户。
-d删除用户。
groupdel命令——删除组账号
groups命令——查询用户账号所属的组
id——查询用户账户的身份标识
finger命令——查询用户账户的登录属性
w命令——查询当前主机的用户登录情况



6
查看目录和文件的属性



在Linux文件系统的安全模型中,为系统中的文件或目录赋予了两个属性:访问权限和文件所有者,简称为“权限”和“归属”。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。Linux系统根据文件或目录的访问权限,归属来对用户访问数据的过程进行控制。


使用带“-l”选项的ls命令时,将以长格式显示出文件或目录的详细信息,其中包括了该文件的权限和归属等参数。


[root@localhost ~]# ls -ld /etc /etc/passwd
drwxr-xr-x. 130 root root 12288 10月 19 16:03 /etc
-rw-r--r--    1 root root  1876 5月  22 2017 /etc/passwd
[root@localhost ~]#


/etc目录和/etc/passwd文件都属于root用户、root组;而第一个字段的数据表示该文件或目录的访问权限,“drwxr-xr-x”和“-rw-r--r--”权限字段由四部分组成。

  • 第1个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、“-”(普通文件)、字母“|”(链接文件)等;

  • 第2~4个字符:表示该文件的属主用户(user)对该文件的访问权限。

  • 第5~7个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限。

  • 第8~10个字符:表示其他任何用户(Other)对该文件的访问权限。


权限字符r、w、x用于文件表示可读、可写、可执行。


r、w、x权限字符可分别表示为八进制数字4、2、1,表示一个权限组合时需要将数字进行累加;例如“rwx”采用累加数字形式表示成“7”,而“rwxr-xr-x”由三个权限段组成,因此表示为“755”。


chmod [ugoa...] [+-=] [rwx] 文件或目录...或者chmod nnn 文件或目录...


  • “ugoa”表示该权限设置所针对的用户类型。“u”代表文件属主,“g”代表文件属组内的用户,“o”代表其他任何用户,“a”代表所有用户。

  • “+-=”表示设置权限的操作动作。“+”代表增加相应权限,“-”代表减少相应权限,“=”代表仅设置对应的权限。

  • “rwx”是权限的字符组合形式,也可以拆分使用;


chmod命令的“-R”选项递归修改指定目录下的所有子项的归属;


chown命令可以只设置属主和属组,也可以同时设置属主、属组。


chown 属主[:[属组]] 文件或目录...


同时设置属主、属组时,用户名和组名之间用冒号“:”进行分隔。如果只设置属组时,需使用“:组名”的形式;


如果只需要设置目录或文件的属主,直接以用户名表示归属即可,递归修改目录归属同样可以使用“-R”选项。


推荐阅读Linux 系统结构详解
Linux环境下vi/vim编辑器常用命令
Linux环境下Oracle数据库常用命令
Oracle数据库环境搭建
Oracle客户端PLSQL的使用说明
Linux磁盘扩容 | LVM逻辑卷使用手册
Tomcat和Weblogic的区别
Tomcat的三种运行模式
Nginx反向代理upstream模块介绍
Docker基础知识
Redis 5.0 正式发布!
高可用Redis服务架构分析与搭建

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存